sample: try to extract a file from the repo
authorFelix Krull <f_krull@gmx.de>
Tue, 2 Oct 2018 20:37:42 +0000 (22:37 +0200)
committerColin Walters <walters@verbum.org>
Fri, 6 May 2022 16:53:53 +0000 (12:53 -0400)
rust-bindings/rust/libostree/src/lib.rs
rust-bindings/rust/libostree/src/repo.rs
rust-bindings/rust/sample/src/main.rs

index c61cacf916e1e111ce163a519acbee2b04f0e79e..cca9c9cabd7c4574c7b2d078391b10ac504c6fa0 100644 (file)
@@ -16,6 +16,7 @@ use glib::Error;
 // re-exports
 mod auto;
 pub use auto::*;
+pub use auto::functions::*;
 
 mod repo;
 
index 8ace774a896b08c06962808eb9c12db147dd6695..5bce9fe0206b98c6633f6ff26c5c5c7c67e4413c 100644 (file)
@@ -12,6 +12,7 @@ use std::ptr;
 
 unsafe extern "C" fn read_variant_table(_key: glib_ffi::gpointer, value: glib_ffi::gpointer, hash_set: glib_ffi::gpointer) {
     let value: glib::Variant = from_glib_none(value as *const glib_ffi::GVariant);
+    // TODO: this set is degenerate because g_variant_hash for my Variants is always 0
     let set: &mut HashSet<glib::Variant> = &mut *(hash_set as *mut HashSet<glib::Variant>);
     set.insert(value);
 }
index 6735fc0141fe639a01e9bd948c18fd3ada7446f4..e6da49e161aea93bd07000d8d70d3f9bfa0d0f67 100644 (file)
@@ -1,11 +1,45 @@
 extern crate gio;
 extern crate libostree;
 
+use std::io::Write;
+use std::fs::File;
+
+use gio::prelude::*;
 use libostree::prelude::*;
 
 fn main() {
-    let repo = libostree::Repo::new_for_str("test-repo");
+    let repo = libostree::Repo::new_for_str("../../../repo-bare");
+
+    //let result = repo.create(libostree::RepoMode::Archive, Option::None);
+    //result.expect("we did not expect this to fail :O");
+
+    repo.open(None).expect("should have opened");
+
+    let (file, checksum) = repo.read_commit("test", None).unwrap();
+
+    println!("path: {:?}", file.get_path());
+
+    println!("sha256: {}", checksum);
+
+    let objs = repo.traverse_commit_manual(checksum.as_str(), -1, None).unwrap();
+
+    for obj in objs {
+        let (name, obj_type) = libostree::object_name_deserialize(&obj);
+        println!("  {}", libostree::object_to_string(name.as_str(), obj_type).unwrap());
+
+        let (stream, size) = repo.load_object_stream(obj_type, name.as_str(), None).unwrap();
+        println!("  bytes: {}", size);
+
+        if obj_type == libostree::ObjectType::File {
+            let mut file = File::create("./object.file").unwrap();
+            let mut read = 1;
+            let mut buffer = [0 as u8; 4096];
+            while read != 0 {
+                read = stream.read(buffer.as_mut(), None).unwrap();
+                file.write(&buffer[0 .. read]);
+            }
+        }
 
-    let result = repo.create(libostree::RepoMode::Archive, Option::None);
-    result.expect("we did not expect this to fail :O");
+        //println!("{:?}", obj.type_());
+    }
 }